The present invention relates to software design modeling, and in particular to round-trip software engineering in which a software application is reverse engineered into a software model, the software model can be changed, and the code represented by the software model can then be re-coded.
Due to inadequate software design modeling, application development projects have typically been very difficult to deliver with any kind of consistent success. A very low percentage of significant application development projects are completed on time and within budget. As projects have grown larger in scope, organizations have begun to partition applications and corresponding subsystems into multiple tiers, with each tier being developed and maintained independently of the others. This enables applications to scale up to the enterprise level. As more complex 3rd generation language projects are developed, a corresponding need for formal analysis and design modeling has increased. Accordingly, in order to combine various disjoint applications into a single large scale solution, existing applications need to be visualized and understood, without recourse to digging through the source code. Furthermore, projects need to be re-engineered using component-based development techniques to take advantage of various emerging object technologies such as CORBA, Microsoft ActiveX (OCX) and the World Wide Web.
The first step required involves adding object-oriented analysis and design to the existing development process. As software needs become increasingly complex, an environment is needed to complement the third generation lifecycle with an object-oriented analysis and design front end, enabling the application writer to take advantage of reusable components and track the development of the project. Many modeling products have been developed for this purpose, such as Platinum Technology, Inc.""s Paradigm Plus. The challenge in such products is to keep the design information synchronized with the code.
As represented in FIG. 1, the capability is required to keep a software model 2 up to date with changing source code 4, allowing the generation of easily understood diagrammatic representations of the software design. This capability has been included in most, if not all, object modeling tools. Without this feature, a software model must be manually updated whenever changes are made in the design as the source code is written. This often leads to forgotten updates to the software model and a software model that is out of date with respect to the source code that it is intended to represent.
As shown in the Venn Diagram in FIG. 2, the problem is exacerbated by the fact that the software model generally only represents a subset of the information represented in the source code, and a large amount of meta-data concerning the project which is stored in the software model is not represented in the source code. For example, neither comments in the source code nor properties of objects relating to their formatting will generally be incorporated in the software model. Design principles and relationships between objects in the modeling methodology being used which are represented in the software model, will not be included explicitly in the source code.
Several tools in the industry have added a round-trip engineering technology which can read the source code and synchronize the software model with the source code. However, these tools rely on being able to place markers into the source code 4 to define areas of the code which correspond to the software model 2. These markers clutter the source code with extraneous marks, causing readability problems. In addition, this technique is prone to error when one of the markers is deleted or inadvertently edited by the developer.
What is required is a method of round-trip engineering allowing a software model to be kept synchronized with corresponding source code or equivalent objects, without the need for code markers cluttering up the code.
The present invention provides a system for keeping a software model representing a software application in synchronization with the source code it represents without the need for any kind of source code markers delimiting parts of the code which are to be synchronized with the software model. The code in the software application is analyzed, and a software model of the aspects of the application which can be incorporated in the software model is generated. The software model is then used to regenerate the source code represented by the software model, and any of the source code which is not represented in the software model is merged into the generated source code from the original code.
These and other objects of the invention will be apparent from the remaining portion of this specification.